function approvalData (list) {
  let parentNode = 0 // 对循环内的当前节点来说，它的父节点是哪个
  let mainNodeCount = 0 // 主节点计数
  let childNodeCount = 0 // 子节点计数

  const flowNode = list.flatMap((v, i) => {
    let res = []
    if (v.isMain) {
      mainNodeCount++
      childNodeCount = 0
    } else {
      const lastNode = list[i - 1]
      // 条件节点
      if (lastNode) {
        if (lastNode.isMain) {
          mainNodeCount++
          const cNodeId = `3${String(mainNodeCount).padStart(2, 0)}${String(childNodeCount).padStart(2, 0)}00`
          parentNode = cNodeId
          res.push({
            nodeType: 2,
            actionType: 2,
            phaseType: 1,
            showInProcess: 1,
            nextSiblingCode: null,
            prevSiblingCode: null,
            code: cNodeId
          })
        }
      } else {
        // 第一个就是条件分支
        mainNodeCount++
        parentNode = '3010000'
        res.push({
          nodeType: 2,
          actionType: 2,
          phaseType: 1,
          showInProcess: 1,
          nextSiblingCode: null,
          prevSiblingCode: null,
          code: '3010000'
        })
      }
      childNodeCount++
    }

    const nodeId = `3${String(mainNodeCount).padStart(2, 0)}${String(childNodeCount).padStart(2, 0)}00`
    let person = []
    if (v.isMain) {
      parentNode = nodeId
    } else {
      person = v.person.map(p => {
        return {
          type: p.type,
          roleId: p.roleId.length ? p.roleId.join(',') : ''
        }
      })
    }
    res.push({
      /**
     * 节点类型：2 条件判断节点，3 需人参与的节点
     */
      nodeType: 3,
      /**
      * 节点要执行的动作标识：2 判断是否需要特批科目费用， 4 审批
      */
      actionType: 4,
      /**
      * 节点在流程中所在的处理阶段：1 审核阶段
      */
      phaseType: 1,
      /**
      * 节点是否在前端的处理记录中显示：0不显示，1显示
      */
      showInProcess: 1,
      /**
      * 父节点编号：主节点的父节点编号为null，分支节点的父节点编号有值
      */
      parentCode: v.isMain ? null : parentNode,
      /**
      * 节点编号
      */
      code: nodeId,
      /**
      * 下一个处理节点的编号
      */
      nextSiblingCode: null,
      /**
       * 1到账号 2到角色
       */
      type: v.isMain ? (v.person[0].type ? 1 : 2) : null,
      /**
     * 处理人id：逗号分隔，type=1时有效
     */
      roleId: v.isMain ? v.person[0].roleId.join(',') : null,
      /**
      * 前一个处理节点的编号，预留暂不用
      */
      prevSiblingCode: null,
      applyType: v.applyType ? v.applyType.join(',') : null,
      conditionValueStr: v.isMain ? null : JSON.stringify(person),
      allowWithdraw: v.allowWithdraw ? 1 : 0
    })
    return res
  })

  // 只有主节点有prevSiblingCode和nextSiblingCode
  const flowMainNode = flowNode.filter(v => !v.parentCode)
  flowMainNode.forEach((v, i) => {
    if (i > 0) {
      v.prevSiblingCode = flowMainNode[i - 1].code
    }
    if (i < flowMainNode.length - 1) {
      v.nextSiblingCode = flowMainNode[i + 1].code
    }
  })
  
  return flowNode
}

export {
  approvalData
}
